package DataBase;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Jaguar
 */
import java.sql.*;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import javax.swing.JOptionPane;
import javax.swing.text.MaskFormatter;
import Beans.Produto;
import Beans.Venda;

public class ProdutoDAO extends DAO {
    
    public List<Produto> ListarTodos() throws Exception {

        /*   Conectar();
        Produto p = null;
        List<Produto> ListaProd = new ArrayList<Produto>();
        String SQL = "SELECT * FROM produto order by codigo";
        Statement verifica = con.createStatement();
        ResultSet rs = verifica.executeQuery(SQL);
        if (rs.next()) {
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        while (rs.next()) {
        p = new Produto();
        p.setRegistro(rs.getString("registro"));
        p.setNome(rs.getString("nome"));
        p.setStatus(rs.getString("status"));
        p.setTipo(rs.getString("tipo"));
        p.setCodigo(rs.getString("codigo"));
        ListaProd.add(p);
        }
        Desconectar();   
        return ListaProd;
        } else {
        JOptionPane.showMessageDialog(null, "Não há Produtos Registrados", "Erro na Listagem", JOptionPane.INFORMATION_MESSAGE);
        Desconectar();
        return ListaProd;
        }   */
        
        
        Conectar();
        String SQL = "SELECT * FROM produto order by codigo";
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        Produto p = null;
        List<Produto> ListaProd = new ArrayList<Produto>();
        while (rs.next()) {
            
            p = new Produto();
            p.setRegistro(rs.getInt("registro"));
            p.setNome(rs.getString("nome"));
            p.setStatus(rs.getString("status"));
            p.setTipo(rs.getString("tipo"));
            p.setCodigo(rs.getString("codigo"));
            p.setPreco(rs.getDouble("preco"));
            ListaProd.add(p);
        }
        Desconectar();
        return ListaProd;
        
    }
    
    public ArrayList<Produto> ListarTodos(String valor) throws Exception {
        
        Conectar();
        String SQL = "SELECT registro,nome,status,tipo,codigo,preco FROM produto where status = 'ativado' and nome like '%" + valor + "%' order by nome";
        //String SQL = "SELECT registro,nome,status,tipo,codigo,preco FROM produto where nome like '%" + valor + "%' ";
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        Produto p = null;
        ArrayList<Produto> lista = new ArrayList<Produto>();
        while (rs.next()) {
            p = new Produto();
            
            p.setRegistro(rs.getInt("registro"));
            p.setNome(rs.getString("nome"));
            p.setStatus(rs.getString("status"));
            p.setTipo(rs.getString("tipo"));
            p.setCodigo(rs.getString("codigo"));
            p.setPreco(rs.getDouble("preco"));
            lista.add(p);
            
        }
        Desconectar();
        return lista;
        
        
        
    }
    
    public Produto busca(String busca) throws Exception {
        Conectar();
        Produto pr = null;
        String SQL_verificar = "select nome from produto where nome= '" + busca + "'";
        Statement verifica = con.createStatement();
        ResultSet rs = verifica.executeQuery(SQL_verificar);
        if (!rs.next()) {
            JOptionPane.showMessageDialog(null, "Produto não Cadastrado", "Erro na Alteração", JOptionPane.INFORMATION_MESSAGE);
            Desconectar();
            return pr;
        } else {
            String SQL = "SELECT * FROM produto WHERE  registro=? or nome=?";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, busca);
            pstmt.setString(2, busca);
            rs = pstmt.executeQuery();
            //Produto pr = null;
            if (rs.next()) {
                pr = new Produto();
                pr.setRegistro(rs.getInt("registro"));
                pr.setNome(rs.getString("nome"));
                pr.setStatus(rs.getString("status"));
                pr.setTipo(rs.getString("tipo"));
                pr.setCodigo(rs.getString("codigo"));
                
            }
            Desconectar();
            return pr;
        }
    }
    
    public Produto pesquisa(String pesquisa) {
        try {
            Conectar();
            String SQL = "SELECT * FROM produto where nome=?";
            pstmt = con.prepareStatement(SQL);
            System.out.println(pesquisa);
            pstmt.setString(1, pesquisa);
            //pstmt.setString(2, pesquisa);
            rs = pstmt.executeQuery();
            Produto p = null;
            
            if (rs.next()) {
                
                p = new Produto();
                
                p.setRegistro(rs.getInt("registro"));
                p.setNome(rs.getString("nome"));
                p.setStatus(rs.getString("status"));
                p.setTipo(rs.getString("tipo"));
                p.setCodigo(rs.getString("codigo"));
                p.setPreco(rs.getDouble("preco"));
                
                Desconectar();
                return p;
            } else {
                p = new Produto();
                p.setNome("invalido");
                return p;
                
            }
            
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Exceção" + ex.getMessage());
            Produto p = new Produto();
            p.setNome("invalido");
            return p;
        }
    }
    
    public boolean cadastroProd(Produto p) {
        try {
            Conectar();
            //String SQL_verificar = "select nome from produto where nome= '" + p.getNome() + "'";
            //Statement verifica = con.createStatement();
            //ResultSet rs = verifica.executeQuery(SQL_verificar);
            
            String SQL_verificar = "select nome, status from produto where nome= '" + p.getNome() + "'";
            Statement verifica = con.createStatement();
            ResultSet rs = verifica.executeQuery(SQL_verificar);
                  
            if (rs.next()) {
                if (rs.getObject("status").toString().equals("desativado"))
                    JOptionPane.showMessageDialog(null, "Produto já Cadastrado e Desativado \n Para Ativa-lo, var para o Menu Alterar", "Erro no Cadastro", JOptionPane.INFORMATION_MESSAGE);
                else
                    JOptionPane.showMessageDialog(null, "Produto já Cadastrado", "Erro no Cadastro", JOptionPane.INFORMATION_MESSAGE);
                Desconectar();
                return false;
            } else {
                String SQL = "INSERT INTO produto (nome, status, tipo, codigo, preco) VALUES('" + p.getNome() + "','" + p.getStatus() + "','" + p.getTipo() + "','" + p.getCodigo() + "'," + p.getPreco() + ")";
                //System.out.println("INSERT INTO produto (nome, status, tipo, codigo, preco) VALUES('" + p.getNome() + "','" + p.getStatus() + "','" + p.getTipo() + "','" + p.getCodigo() + "'," + p.getPreco() + ")");
                Statement s = con.createStatement();
                s.executeUpdate(SQL);
                JOptionPane.showMessageDialog(null, "Produto " + p.getNome() + " Enviado com Sucesso ");
                Desconectar();
                return true;
            }
            
        } catch (Exception ex) {
            System.out.println("Erro " + ex);
            System.out.println("erro no método cadastrar ");
            return false;
        }
        
    }
    
    public boolean remProd(String nomProd) {
        //throws Exception {
        
         try {
            Conectar();
            String SQL_verificar = "select nome from produto where nome= '" + nomProd + "'";
            Statement verifica = con.createStatement();
            ResultSet rs = verifica.executeQuery(SQL_verificar);
            if (!rs.next()) {
                JOptionPane.showMessageDialog(null, "Produto Inexistente", "Erro na Exclusão", JOptionPane.INFORMATION_MESSAGE);
                Desconectar();
                return false;
            } else {
                //String SQL = ("delete from produto where nome=?");
                String SQL = "update produto set status='desativado' where nome=?";
                pstmt = con.prepareStatement(SQL);
                pstmt.setString(1, nomProd);
                pstmt.executeUpdate();
                JOptionPane.showMessageDialog(null, "Produto " + nomProd + " Excluido com Sucesso ");
                Desconectar();
                return true;
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro na Remoção do Produto", "ERRO No Banco", JOptionPane.ERROR_MESSAGE);
            return false;
        }
    }
    
    public boolean alterarProd(Produto p, String nome) {
        try {
            Conectar();
            /*            String SQL_verificar = "select nome from produto where nome= '" + p.getNome() + "'";
            Statement verifica = con.createStatement();
            ResultSet rs = verifica.executeQuery(SQL_verificar);
            if (rs.next()) {
            JOptionPane.showMessageDialog(null, "Já existe produto com este nome", "Erro na Alteração", JOptionPane.INFORMATION_MESSAGE);
            Desconectar();
            return false;
            } else {*/
            String SQL = "update produto set nome = '" + p.getNome() + "', status = '" + p.getStatus() + "' , tipo = '" + p.getTipo() + "' , codigo = '" + p.getCodigo() + "' , preco = " + p.getPreco() + " where nome = '" + nome + "'";
            Statement s = con.createStatement();
            s.executeUpdate(SQL);
            //System.out.println("ola");
            Desconectar();
            return true;
//            }
        } catch (Exception ex) {
            System.out.println("Erro " + ex);
            return false;
        }
    }

    public Produto consultarBd(String cod) throws Exception {
        
        try {
            
            Conectar();
            String SQL = ("SELECT * FROM produto WHERE codigo=?");
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, (cod));
            rs = pstmt.executeQuery();
            
            
            System.out.println("consultou tabela produto é do metodo consultarBd PRODUTO");
            //cria um objeto AbaCadastro e configura os dados p/ inserir no objeto AbaCadastro
            Produto pd = null;
            if (rs.next()) {
                pd = new Produto();
                pd.setCodigo(rs.getString("codigo"));
                pd.setNome(rs.getString("nome"));
                pd.setStatus(rs.getString("status"));
                pd.setTipo(rs.getString("tipo"));
                pd.setPreco(rs.getFloat("preco"));
                
                System.out.println("dentro da Tabela produto");
            }
            
            
            Desconectar();
            return pd;//retorna o objeto que sera passado p/ botão consultar

        } catch (SQLException se) {
            return null;
        }
    }

    public List<Produto> ListarVenda() throws Exception {
        
        
        
        
        Conectar();
        String SQL = "SELECT * FROM produto ";
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        Produto p = null;
        List<Produto> ListaProd = new ArrayList<Produto>();
        
        while (rs.next()) {
            
            p = new Produto();
            p.setRegistro(rs.getInt("registro"));
            p.setNome(rs.getString("nome"));
            p.setStatus(rs.getString("status"));
            p.setTipo(rs.getString("Tipo"));
            p.setCodigo(rs.getString("codigo"));
            p.setPreco(rs.getFloat("preco"));
            
            ListaProd.add(p);
        }
        Desconectar();
        return ListaProd;
        
    }

    public String getQuantProd(int nome) {
        try {
            Conectar();
            String SQL = ("select quantidade from itens where codigo=?; ");
            pstmt = con.prepareStatement(SQL);
            pstmt.setInt(1, nome);
            rs = pstmt.executeQuery();
            String quant = "";
            
            if (rs.next()) {
                System.out.println("aqui no metodo getQuantProd ");
                quant += rs.getString("quantidade");
            }
            Desconectar();
            return quant;
        } catch (Exception ex) {
            System.out.println("Execeção getQuantProd" + ex.getMessage());
            return ex.getMessage();
        }
    }

    public boolean vendaTemp(Produto p) {
        try {
            Conectar();
            String SQL = "insert into tbvenda values(?,?,?,?,?);";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, p.getRegistro() + "");
            pstmt.setString(2, p.getNome());
            pstmt.setString(3, p.getQuantidade() + "");
            pstmt.setString(4, p.getPreco() + "");
            //pstmt.setFloat(5, p.getQuantidade() * p.getPreco());
            pstmt.executeUpdate();
            Desconectar();
            return true;
        } catch (Exception ex) {
            return false;
        }
    }

    public static String obterData() {
        Date d = new Date();
        Locale loc = new Locale("pt", "BR");
        Calendar c = Calendar.getInstance(loc);

        DateFormat df = DateFormat.getDateInstance(DateFormat.FULL);
        d = c.getTime();
        return df.format(d);

    }
    public static String obterHora() {
        Date d = new Date();
        Locale loc = new Locale("pt", "BR");
        Calendar c = Calendar.getInstance(loc);

        DateFormat df = DateFormat.getDateTimeInstance();
        d = c.getTime();
        return df.format(d);

    }
public List<Produto> ListarVenda(String codigo,String nome,String quantidade,String preco,String mesa,String hora,String data,String cod_funcionario)  {
          try{
        Conectar();
        String SQL = "insert into tbvenda (codigo,nome,quantidade,preco,mesa,status,hora,data,cod_funcionario)values(?,?,?,?,?,?,?,?,?) ";
        pstmt = con.prepareStatement(SQL);
            
            pstmt.setString(1, codigo);
            System.out.println(codigo);
            pstmt.setString(2, nome);
            System.out.println(nome);
            pstmt.setString(3,quantidade);
            System.out.println(quantidade);
            pstmt.setString(4, preco);
            System.out.println(preco);
            pstmt.setString(5, mesa);
            System.out.println(mesa);
            pstmt.setString(6, "ATIVO");
            pstmt.setString(7, hora);
            System.out.println(hora);
            pstmt.setString(8, data);
            System.out.println(data);
            pstmt.setString(9, cod_funcionario);
            System.out.println(cod_funcionario);
            pstmt.executeUpdate();

        SQL = "SELECT * FROM tbvenda where mesa = ?";
        pstmt = con.prepareStatement(SQL);
        pstmt.setString(1, mesa);
        rs = pstmt.executeQuery();
        
        Produto p = null;
        List<Produto> ListaVenda = new ArrayList<Produto>();
        while (rs.next()) {
            p = new Produto();
            p.setCodigo(rs.getString("codigo"));
            System.out.println("dentro do sql venda");
            p.setNome(rs.getString("nome"));
            p.setQuantidade(rs.getInt("quantidade"));    
            p.setPreco(rs.getFloat("preco"));
            

            ListaVenda.add(p);
        }
        Desconectar();
        return ListaVenda;
        }catch(Exception ex){
            System.out.println("Execeção Listar Venda"   +ex.getMessage());
            return  new ArrayList<Produto>() ;
        }
    }
 public Venda consultarBdTbvenda(String mesa) throws Exception {

        try {

            Conectar();
            String SQL = ("SELECT * FROM tbvenda where mesa=?");
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, mesa);
            rs = pstmt.executeQuery();


            System.out.println("consultou tabela tbvenda é do metodo consultarBdTbvenda tbvenda");
            //cria um objeto AbaCadastro e configura os dados p/ inserir no objeto AbaCadastro
            Venda pd = null;
            if (rs.next()) {
                pd = new Venda();
                pd.setMesa(rs.getString("mesa"));
                pd.setPedido(rs.getString("pedido"));


                System.out.println("dentro da Tabela tbvenda");
            }


            Desconectar();
            return pd;//retorna o objeto que sera passado p/ botão consultar

        } catch (SQLException se) {
            return null;
        }
    }
 
  public boolean alterarTabela(Venda p, String numero) {
        try {
            Conectar();
            /*            String SQL_verificar = "select nome from produto where nome= '" + p.getNome() + "'";
            Statement verifica = con.createStatement();
            ResultSet rs = verifica.executeQuery(SQL_verificar);
            if (rs.next()) {
            JOptionPane.showMessageDialog(null, "Já existe produto com este nome", "Erro na Alteração", JOptionPane.INFORMATION_MESSAGE);
            Desconectar();
            return false;
            } else {*/
            String SQL = "update tbvenda set mesa = '" + numero + "'";
            Statement s = con.createStatement();
            s.executeUpdate(SQL);
            System.out.println("ola");
            Desconectar();
            return true;
//            }
        } catch (Exception ex) {
            System.out.println("Erro " + ex);
            return false;
        }
    }
 
 
 
}


